<?php
namespace Amis\other;

use Amis\Basics\AmisBasics;

class Wizard extends AmisBasics
{
    public string $type = 'wizard';

    public function className($className)
    {
        $this->className = $className;
        return $this;
    }

    /**
     * 展示模式，选择：horizontal 或者 vertical
     * @param bool $mode
     * @return $this
     */
    public function mode(bool $mode = true)
    {
        $this->mode = $mode ? 'horizontal' : 'vertical';
        return $this;
    }

    /**
     * 最后一步保存的接口。
     * @param string $api
     * @return $this
     */
    public function api(string $api)
    {
        $this->api = $api;
        return $this;
    }

    /**
     * 初始化数据接口
     * @param string $initApi
     * @return $this
     */
    public function initApi(string $initApi)
    {
        $this->initApi = $initApi;
        return $this;
    }

    /**
     * 初始是否拉取数据。
     * @param  $initFetch
     * @return $this
     */
    public function initFetch($initFetch)
    {
        $this->initFetch = $initFetch;
        return $this;
    }

    /**
     * 初始是否拉取数据，通过表达式来配置
     * @param $initFetchOn
     * @return $this
     */
    public function initFetchOn($initFetchOn)
    {
        $this->initFetchOn = $initFetchOn;
        return $this;
    }

    public function actionPrevLabel(string $actionPrevLabel = '上一步')
    {
        $this->actionPrevLabel = $actionPrevLabel;
        return $this;
    }

    public function actionNextLabel(string $actionNextLabel = '下一步')
    {
        $this->actionNextLabel = $actionNextLabel;
        return $this;
    }

    public function actionNextSaveLabel(string $actionNextSaveLabel = '保存并下一步')
    {
        $this->actionNextSaveLabel = $actionNextSaveLabel;
        return $this;
    }

    public function actionFinishLabel(string $actionFinishLabel = '完成')
    {
        $this->actionFinishLabel = $actionFinishLabel;
        return $this;
    }

    public function actionClassName(string $actionClassName = 'btn-sm btn-default')
    {
        $this->actionClassName = $actionClassName;
        return $this;
    }

    /**
     * 操作完后刷新目标对象。请填写目标组件设置的 name 值，如果填写为 window 则让当前页面整体刷新。
     * @param string $reload
     * @return $this
     */
    public function reload(string $reload)
    {
        $this->reload = $reload;
        return $this;
    }

    /**
     * 操作完后跳转。
     * @param int $redirect
     * @return $this
     */
    public function redirect(int $redirect = 3000)
    {
        $this->redirect = $redirect;
        return $this;
    }

    /**
     * 可以把数据提交给别的组件而不是自己保存。请填写目标组件设置的 name 值，
     * 如果填写为 window 则把数据同步到地址栏上，同时依赖这些数据的组件会自动重新刷新。
     * @param bool $target
     * @return $this
     */
    public function target(bool $target = false)
    {
        $this->target = $target;
        return $this;
    }

    /**
     * 数组，配置步骤信息
     * @param WizardStep $steps
     * @return $this
     */
    public function steps(WizardStep $steps)
    {
        $this->steps = $steps;
        return $this;
    }

    /**
     * 起始默认值，从第几步开始。可支持模版，但是只有在组件创建时渲染模版并设置当前步数，在之后组件被刷新时，当前 step 不会根据 startStep 改变
     * @param string|int $startStep
     * @return $this
     */
    public function startStep(int $startStep = 1)
    {
        $this->startStep = $startStep;
        return $this;
    }
}